package db

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"time"
	"wxapi/internal/svc"
)

func initMysql(ctx *svc.ServiceContext) error {
	if err := createMysqlDB(ctx); err != nil {
		return err
	}

	return nil
}

func createMysqlDB(ctx *svc.ServiceContext) error {
	dsn := fmt.Sprintf("%v:%v@tcp(%v:%d)/%v?charset=utf8mb4&parseTime=True&loc=Local", ctx.Config.Mysql.User,
		ctx.Config.Mysql.Pass, ctx.Config.Mysql.Host, ctx.Config.Mysql.Port, ctx.Config.Mysql.DBName)
	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN: dsn,
	}), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info),
	})
	if err != nil {
		return err
	}

	sqlDb, _ := db.DB()
	sqlDb.SetMaxIdleConns(1024)
	sqlDb.SetMaxOpenConns(1024)
	sqlDb.SetConnMaxLifetime(time.Hour)

	ctx.Mysql = db

	return nil
}
